package cn.iocoder.devlop.module.annual.report.baseinfo.service;

import cn.iocoder.devlop.module.annual.report.baseinfo.controller.vo.*;
import cn.iocoder.devlop.module.annual.report.baseinfo.dal.dataobject.BaseinfoDO;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 年报基本信息表(基本信息，资产状况，党建信息) Service 接口
 *
 * @author sunhao
 */
public interface BaseinfoService {


    /**
     * 更新年报基本信息表(基本信息，资产状况，党建信息)
     *
     * @param baseinfoUpdateReqVO 更新信息
     */
    void updateBaseinfo(@Valid BaseinfoUpdateReqVO baseinfoUpdateReqVO);


    /**
     * 获得年报基本信息表(基本信息，资产状况，党建信息)
     *
     * @param regno     注册号
     * @param ancheyear 年报年份
     * @return 年报基本信息表(基本信息 ， 资产状况 ， 党建信息)
     */
    BaseinfoDO getBaseinfo(String regno, String ancheyear);




    /**
     * 获得年报完成度列表
     */
    List<CompletionCheckVO> getBaseinfoList(String regno,String uniscid);

    /**
     * 提交年报记录，修改年报状态
     *
     * @param baseinfoDO 用的是年份和注册号
     * @return 修改完成后的年报记录
     */
    BaseinfoDO submit(BaseinfoVO baseinfoDO);


    /**
     * 效验是否存在数据
     *
     * @param regno     注册号
     * @param ancheyear 年报年份
     * @return 是否存在
     */
    Boolean validateBaseinfoExists(String regno, String ancheyear);


    /**
     * 企业年报导入往年的数据
     *
     * @param regno           注册号
     * @param impAncheyear    数据源
     * @param targetAncheyear 新的年份
     */
    Map<String,Boolean> impData(String regno, String impAncheyear, String targetAncheyear, String enttype);

    /**
     * 基本信息初始化
     *
     */
    void initBaseinfo(String regno,String ancheyear);

    /**
     * 从业人数修改
     *
     */
    void updateEmpnum(EmpnumUpdateVO empnumUpdateVO);


    /**
     * 党建信息修改
     *
     */
    void updatePartybuilding(PartybuildingUpdateVO partybuildingUpdateVO);

    /**
     * 资产信息修改
     *
     */
    void updateAssetinfo(AssetinfoUpdateVO assetinfoUpdateVO);

    /**
     * 修改年报信息
     *
     */
    void baseinfoUpdate(BaseinfoDO baseinfoDO);

    /**
     * 获取基础信息表单数据
     */
    BaseinfoUpdateReqVO getBaseinfoForApp(String regno, String ancheyear);

    /**
     * 获取成员信息表单数据
     */
    EmpnumUpdateVO getEmpnum(String regno, String ancheyear);

    /**
     * 获取党建信息表单数据
     */
    PartybuildingUpdateVO getPartybuilding(String regno, String ancheyear);

    /**
     * 获取资产信息表单数据
     */
    AssetinfoUpdateVO getAssetinfo(String regno, String ancheyear);

    /**
     * 修改年报状态为已修改待提交
     */
    void updateState(String regno, String ancheyear);
}
